package com.deng.dubbo.consumer;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.deng.dubbo.library.IUserService;

import java.io.IOException;

/**
 * @Author DengLibin
 * @Date 19-5-15
 * @Time 下午6:39
 * @Desc 服务消费者
 */
public class ServiceConsumer {

    public static void main(String[] args) throws IOException {
        // 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("user_service_consumer");

// 连接注册中心配置
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("192.168.0.104");
        registry.setPort(2181);
        registry.setProtocol("zookeeper");

// 注意：ReferenceConfig为重对象，内部封装了与注册中心的连接，以及与服务提供方的连接

// 引用远程服务
        ReferenceConfig<IUserService> reference = new ReferenceConfig<>(); // 此实例很重，封装了与注册中心的连接以及与提供者的连接，请自行缓存，否则可能造成内存和连接泄漏
        reference.setApplication(application);
        reference.setRegistry(registry); // 多个注册中心可以用setRegistries()
        reference.setInterface(IUserService .class);
        reference.setVersion("1.0");

// 和本地bean一样使用xxxService
        IUserService  userService = reference.get(); // 注意：此代理对象内部封装了所有通讯细节，对象较重，请缓存复用

        System.out.println(userService.getById(1).getName());
        reference.destroy();
        System.in.read();
    }
}
